#include <iostream>
#include <future>
#include <chrono>

// std::string async_task()
// {
//     std::cout << "任务正在执行" << std::endl;
//     return "获取成功";
// }

// int main()
// {
//     std::future<std::string> result = std::async(std::launch::async,async_task);
//     std::this_thread::sleep_for(std::chrono::seconds(10));

//     std::string name = result.get();
//     std::cout << name << std::endl;
    
//     return 0;
// }

// std::string async_task()
// {
//     std::cout << "任务执行中" << std::endl;
//     return "获取成功";
// }

// int main()
// {
//     std::future<std::string> result = std::async(std::launch::deferred,async_task);
//     std::this_thread::sleep_for(std::chrono::seconds(10));
//     std::cout << "任务在等待10s后再执行" << std::endl;
//     std::string name = result.get();
//     std::cout << name << std::endl;
    
//     return 0;
// }


// #include <iostream>
// #include <future>
// #include <thread>
// #include <utility>

// std::string async_task() 
// {
//     std::cout << "任务执行中" << std::endl;
//     return "获取成功";
// }

// int main() 
// {
//     // 1. 创建 packaged_task 并获取 future
//     std::packaged_task<std::string()> task(async_task);
//     std::future<std::string> result = task.get_future();

//     // 2. 将任务移动到新线程中异步执行
//     std::thread t(std::move(task));
//     t.detach();  // 或 t.join()

//     // 3. 获取结果（阻塞直到任务完成）
//     std::string name = result.get();  // 若任务未执行会在此阻塞
//     std::cout << name << std::endl;

//     return 0;
// }


// #include <iostream>
// #include <future>
// #include <thread>

// void task(std::promise<int> promise_result)
// {
//     int result = 2;
//     std::cout << "task result: " << result << std::endl;
//     std::this_thread::sleep_for(std::chrono::seconds(5));
//     promise_result.set_value(result);
// }

// int main()
// {
//     std::promise<int> promise_result;
//     std::future<int> future_result = promise_result.get_future();

//     std::thread task_thread(task,std::move(promise_result));
//     task_thread.detach();
//     std::this_thread::sleep_for(std::chrono::seconds(1));
//     std::cout << "执行其他操作" << std::endl;

//     int result = future_result.get();
//     std::cout << "result: " << result << std::endl;

//     return 0;
// }



